From 49fed3d7d7e7fee0d52321463a20157b0ec4c03c Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 18 Nov 2010 19:18:09 -0500 Subject: [PATCH] More css parsing tests --- gtk/tests/Makefile.am | 6 +-- gtk/tests/stylecontext.c | 109 +++++++++++++++++++++++++++++++++++++++ gtk/tests/test.png | Bin 0 -> 3569 bytes 3 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 gtk/tests/test.png diff --git a/gtk/tests/Makefile.am b/gtk/tests/Makefile.am index 8b326c62d4..dda9727d49 100644 --- a/gtk/tests/Makefile.am +++ b/gtk/tests/Makefile.am @@ -50,8 +50,8 @@ floating_SOURCES = floating.c floating_LDADD = $(progs_ldadd) #TEST_PROGS += object -object_SOURCES = object.c pixbuf-init.c -object_LDADD = $(progs_ldadd) +#object_SOURCES = object.c pixbuf-init.c +#object_LDADD = $(progs_ldadd) # this doesn't work in make distcheck, since running # on a naked X server creates slightly different event @@ -103,7 +103,7 @@ gtk_example_application_LDADD = $(progs_ldadd) TEST_PROGS += stylecontext stylecontext_SOURCES = stylecontext.c stylecontext_LDADD = $(progs_ldadd) -EXTRA_DIST += test.css +EXTRA_DIST += test.css test.png EXTRA_DIST += \ diff --git a/gtk/tests/stylecontext.c b/gtk/tests/stylecontext.c index c2c20f4b98..8a53821576 100644 --- a/gtk/tests/stylecontext.c +++ b/gtk/tests/stylecontext.c @@ -31,6 +31,18 @@ test_parse_at (void) "@import url(\"test.css\");", "@import url('test.css');", "@import\nurl (\t\"test.css\" ) ;", + "@define-color bg_color #f9a039;", + "@define-color color @bg_color;", + "@define-color color rgb(100, 99, 88);", + "@define-color color rgba(50%, 50%, 50%, 0.5);", + "@define-color color lighter(#f9a039);", + "@define-color color darker ( @blue ) ;", + "@define-color color shade(@blue, 1.3);", + "@define-color color alpha(@blue, 1.3);", + "@define-color color mix(@blue, @red, 0.2);", + "@define-color color red;", + "@define-color color mix(shade (#121212, 0.5), mix (rgb(10%,20%,100%), @blue,0.5), 0.2);", + "@define-color blue @blue;", NULL }; @@ -41,6 +53,20 @@ test_parse_at (void) "@import url(');", "@import url(\"abc');", "@ import ;", + "@define_color blue red;", + "@define-color blue #12234;", + "@define-color blue #12g234;", + "@define-color blue @@;", + "@define-color blue 5!#%4@DG$##x;", + "@define-color color mix(@red, @blue, @green);", + "@define-color color mix(@blue, 0.2, @red);", + "@define-color color mix(0.2, @blue, @red);", + "@define-color color mix(@blue, @red);", + "@define-color color mix(@blue);", + "@define-color color mix();", + "@define-color color rgba(50%, 50%, 50%);", + "@define-color color rgb(50%, a);", + "@three-dee { some other crap };", NULL }; @@ -104,6 +130,8 @@ test_parse_selectors (void) "E:active:prelight {}", "* > .notebook tab:first-child .label:focused {}", "E, F {}", + "E, F /* comment here */ {}", + "E,/* comment here */ F {}", NULL }; @@ -147,6 +175,86 @@ test_parse_selectors (void) } } +static void +test_parse_declarations (void) +{ + GtkCssProvider *provider; + GError *error; + gboolean res; + gint i; + const gchar *valid[] = { + "* {}", + "* { font: Sans 15 }", + "* { font: Sans 15; }", + "* { font: bold }", + "* { color: red }", + "* { /* just a comment */ }", + "* { /* multi\nline\ncomment */ }", + "* { font: /* comment here */ Sans 15 }", + "* { color: red; background-color: shade (@bg_color, 0.5) }", + "* { margin: 5 }", + "* { margin: 5 10 }", + "* { margin: 5 10 3 }", + "* { margin: 5 10 3 5 }", + "* { padding: 5 }", + "* { padding: 5 10 }", + "* { border-width: 5; border-radius: 10 }", + "* { border-color: #ff00ff }", + "* { engine: clearlooks }", + "* { background-image: -gtk-gradient (linear, \n" + " left top, right top, \n" + " from (#fff), to (#000)) }", + "* { background-image: -gtk-gradient (linear, \n" + " 0.0 0.5, 0.5 1.0, \n" + " from (#fff), \n" + " color-stop (0.5, #f00),\n" + " to (#000)) }", + "* { background-image: -gtk-gradient (radial, \n" + " center center, 0.2, \n" + " center center, 0.8, \n" + " color-stop (0.0,#fff),\n" + " color-stop (1.0,#000))}\n", + "* { border-image: url (\"test.png\") 3 4 3 4 stretch }", + "* { border-image: url (\"test.png\") 3 4 3 4 repeat stretch}", + "* { transition: 150ms ease-in-out }", + "* { transition: 1s linear loop }", + NULL + }; + + const gchar *invalid[] = { + "* { color }", + "* { color:green; color }", + "* { color:red; color; color:green }", + "* { color:green; color: }", + "* { color:red; color:; color:green }", + "* { color:green; color{;color:maroon} }", + "* { color:red; color{;color:maroon}; color:green }", + "* { content: 'Hello", + NULL + }; + + error = NULL; + for (i = 0; valid[i]; i++) + { + provider = gtk_css_provider_new (); + res = gtk_css_provider_load_from_data (provider, valid[i], -1, &error); + g_assert_no_error (error); + g_assert (res); + + g_object_unref (provider); + } + + for (i = 0; invalid[i]; i++) + { + provider = gtk_css_provider_new (); + res = gtk_css_provider_load_from_data (provider, invalid[i], -1, &error); + g_assert_error (error, GTK_CSS_PROVIDER_ERROR, GTK_CSS_PROVIDER_ERROR_FAILED); + g_assert (!res); + g_object_unref (provider); + g_clear_error (&error); + } +} + int main (int argc, char *argv[]) { @@ -156,6 +264,7 @@ main (int argc, char *argv[]) g_test_add_func ("/style/parse/empty", test_parse_empty); g_test_add_func ("/style/parse/at", test_parse_at); g_test_add_func ("/style/parse/selectors", test_parse_selectors); + g_test_add_func ("/style/parse/declarations", test_parse_declarations); return g_test_run (); } diff --git a/gtk/tests/test.png b/gtk/tests/test.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0f45849190d5360edac3fc72915657a9ed16be GIT binary patch literal 3569 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 literal 0 HcmV?d00001 -- 2.30.2